﻿using System;
using System.Collections.Generic;

namespace JH
{
    public static class RotateListExtension
    {
        /// <summary>
        ///  如果原先是 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14, 参数传入 3, 则变为 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2
        /// </summary>
        /// <param name="list">要旋转的列表</param>
        /// <param name="element">指定的元素，列表将旋转到该元素成为第一个元素</param>
        public static void RotateListEm<T>(this List<T> list, T element)
        {
            if (list == null)
                throw new ArgumentNullException(nameof(list));

            // 检查列表是否包含元素，如果不包含则不做任何操作
            int index = list.IndexOf(element);
            if (index == -1 || index == 0) return;

            // 调用重载方法
            list.RotateListEm(index);
        }

        /// <summary>
        ///  如果原先是 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14, 参数传入 3的索引“4”, 则变为 3 4 5 6 7 8 9 10 11 12 13 14 0 1 2
        /// </summary>
        /// <param name="list">要旋转的列表</param>
        ///  <param name="index">指定的索引，列表将旋转到该索引对应的元素成为第一个元素</param>
        public static void RotateListEm<T>(this List<T> list, int index)
        {
            if (list == null)
                throw new ArgumentNullException(nameof(list));
            if (index < 0 || index >= list.Count)
                throw new ArgumentOutOfRangeException(nameof(index));

            if (index == 0) return;

            list.Reverse(0, index);
            list.Reverse(index, list.Count - index);
            list.Reverse();
        }
    }
}